<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			/**
			 * 区别
			 * var let 声明变量，const 声明常量
			 * var  声明全局变量
			 * let  声明局部变量
			 * const 声明局部常量
			 * var let 可以先声明，后赋值，const不行 
			 * var 变量可以在同一作用域重复声明，let和const不行
			 * var 变量提升、let和const不行
			 * */
			let app = 100;
			var app1 = 1000;
			const app2 = 10000;
			if (true) {
				console.log(this.app) //let声明的变量不在window上，所以显示undefined
				console.log(app) //向上找app变量
				console.log(app1) //向上找app1变量
				console.log(app2) //向上找app2常量
				// console.log(app3) //向上找app3变量 没有声明就报错
			}

			function fn1() {
				console.log(this)
				console.log(app)
			}
			fn1(); //100
			var obj = {
				fn1: function() {
					console.log(this)
					console.log(app)
				}
			}
			obj.fn1();


			{
				const foo = 'bar';
				let baz = 'qux';
				var quux = 'corge';
			}
			// console.log(foo); // 因为没有声明，所以报错
			console.log(window.foo); // undefined
			console.log(window.baz); // undefined
			console.log(window.quux); // 'corge'
		</script>
	</body>
</html>